#!/usr/bin/env python
# -*- coding: utf-8 -*-
import locale

##Init class##
class tableprint:
      
    def __init__(self):  
        locale.setlocale(locale.LC_NUMERIC, "")
                
    def format_num(self,num):
        """Format a number according to given places.
        Adds commas, etc. Will truncate floats into ints!"""
        try:
            inum = int(num)
            return locale.format("%.*f", (0, inum), True)
        except (ValueError, TypeError):    
            return str(num)
        
    def get_max_width(self,table, index):
        """Get the maximum width of the given column index"""
        return max([len(self.format_num(row[index])) for row in table])

    def pprint_table(self,out, table):
        """Prints out a table of data, padded for alignment
        @param out: Output stream (file-like object)
        @param table: The table to print. A list of lists.
        Each row must have the same number of columns. """
        col_paddings = []

        for i in range(len(table[0])):
            col_paddings.append(self.get_max_width(table, i))

        for row in table:
            # left col
            print >> out, row[0].ljust(col_paddings[0] + 1),
            # rest of the cols
            for i in range(1, len(row)):
                col = self.format_num(row[i]).rjust(col_paddings[i] + 2)
                print >> out, col,
            print >> out

